package com.ply.flashsalessystem.service.impl;

import com.ply.flashsalessystem.annotation.AuthorityName;
import com.ply.flashsalessystem.entity.pojo.Authority;
import com.ply.flashsalessystem.entity.pojo.AuthorityGroup;
import com.ply.flashsalessystem.entity.pojo.LManageGroup;
import com.ply.flashsalessystem.exception.IdentityException;
import com.ply.flashsalessystem.mapper.AuthorityGroupMapper;
import com.ply.flashsalessystem.mapper.AuthorityMapper;
import com.ply.flashsalessystem.service.AuthorityService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author XiaoPan
 * @since 2022-05-04
 */
@Service
public class AuthorityServiceImpl implements AuthorityService {
    @Autowired
    AuthorityMapper authorityMapper;

    @Autowired
    AuthorityGroupMapper authorityGroupMapper;

    /**
     *     查询 所有权限
     */
    @Override
    public List<Authority> queryAllAuthority() {
        return authorityMapper.queryAllAuthority();
    }

    /**
     * 根据 权限组 查询 权限
     */
    @Override
    public List<Authority> queryByRole(Integer roleId) {
        return authorityMapper.queryByRole(roleId);
    }


    /**
     * 根据 权限组id 和 权限id 查询有记录吗 也就是判断 这个用户 有没有这个权限
     * true 表示 有权限   false 表示 没有权限
     */
    @Override
    public boolean groupAndId(Integer authorityId, Integer groupId) {
        return authorityMapper.groupAndId(authorityId, groupId) != null;
    }


    /**
     * 根据 权限id 和 用户id 查询有记录吗 也就是判断 这个用户 有没有这个权限
     * true 表示 有权限   false 表示 没有权限
     */
    @Override
    public boolean authorityAndId(Integer authorityId, Long managerId) {
        return authorityMapper.authorityAndId(authorityId, managerId) != null;
    }

    /**
     * 管理员注册 获得 所有 权限
     * @param manageId
     */
    @Override
    public void addAllGroup(Integer manageId) {
        List<AuthorityGroup> authorityGroups = queryAll();
        // 第0个 是 用户的   第1个 是 店家的  所有从 第2个开始
        List<LManageGroup> list = new ArrayList<>();
        for (int i = 2; i < authorityGroups.size(); i++) {
            LManageGroup lManageGroup = new LManageGroup();
            lManageGroup.setManageId(manageId);
            lManageGroup.setAuthorityGroupId(authorityGroups.get(i).getAuthorityGroupId());
            list.add(lManageGroup);
        }
        if (authorityGroupMapper.addLGM(list) == 0){
            throw new RuntimeException("增加权限失败");
        }
    }

    /**
     * 增加 权限组
     */
    @Override
    public void addGroup(String name) {
        if (authorityGroupMapper.addGroup(name) == 0){
            throw new IdentityException("增加 权限组 失败");
        }
    }

    /**
     * 删除权限组
     */
    @Override
    public void deleteGroup(Integer groupId) {
        if (authorityGroupMapper.deleteGroup(groupId) == 0){
            throw new IdentityException("删除 权限组 失败");
        }
    }

    /**
     * 根据 管理员id 查询 权限组
     * @param managerId
     * @return
     */
    @Override
    public List<AuthorityGroup> queryByManagerId(Integer managerId) {
        return authorityGroupMapper.queryGroup(managerId);
    }

    /**
     * 查询 所有权限组
     */
    @Override
    public List<AuthorityGroup> queryAll() {
        return authorityGroupMapper.query();
    }
}
